package com.jrx.anytxn.accounting.mapper.ext;

import com.jrx.anytxn.accounting.entity.GaVoucherInfo;
import com.jrx.anytxn.accounting.mapper.base.GaVoucherInfoMapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 传票流水表的自定义接口
 *
 * @author Qingyao Xing
 * @date 2019/9/6 16:51
 */
public interface ExtVoucherInfoMapper extends GaVoucherInfoMapper {

    /**
     * 根据业务日期 分组查询流水号的 用于并账检查批次调度
     *
     * @param businessDate 业务日期
     * @return
     */
    List<GaVoucherInfo> selectVoucherByDateForBatch(Date businessDate);

    /**
     * 根据流水号查询传票流水表集合 用于批次调度
     *
     * @param flowno 流水号
     * @return 传票流水表集合
     */
    List<GaVoucherInfo> selectVoucherListByFlownoForBatch(String flowno);

    /**
     * 根据业务日期 查询传票流水表 用于并账处理
     *
     * @param businessDate 业务日期
     * @return
     */
    List<GaVoucherInfo> selectVoucherByDateForBillingBatch(Date businessDate);



    /**
     * 根据条件查询符合条件的传票流水
     *
     * @param tenantId  租户id
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param loanId    订单id
     * @param loanId    客户id
     * @return List
     */
    List<GaVoucherInfo> selectVoucherInfoByTenId(@Param("tenantId") String tenantId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("loanId") String loanId, @Param("customerId") String customerId, @Param("channel") String channel);

    /**
     * 根据主键和租户ID查询信息
     *
     * @param id       主键
     * @param tenantId 租户ID
     * @return com.jrx.anytxn.accounting.entity.VoucherInfo
     * @author fan.yang
     * date: 2019/10/16 0016 下午 16:55
     */
    GaVoucherInfo selectByIdAndTenIdAndCusId(@Param("id") Long id, @Param("tenantId") String tenantId, @Param("customerId") String customerId);


    /**
     * 根据科目号，租户编号查询传票流水
     *
     * @param SubjectId
     * @param tenantId
     * @return
     */
    List<GaVoucherInfo> selectVoucherInfoBySubjectIdAndTenantId(@Param("subjectId") String SubjectId, @Param("tenantId") String tenantId);

    int deleteByDateAndInvestorId(@Param("businessDate") Date businessDate,
                                  @Param("investorId") String investorId);

    int deleteByDateAndNotInvestorId(@Param("businessDate") Date businessDate, @Param("investorId") String investorId);

    /**
     * 批量插入
     *
     * @param recordList
     * @return
     */
    int batchInsert(List<GaVoucherInfo> recordList);

    List<GaVoucherInfo> selectVoucherByDateForInvestor(Date businessDate);

    /**
     * 传票流水修数
     * @param date
     */
    void modifyEntry(@Param("businessDate") String date);

    GaVoucherInfo selectByLongId(@Param("longId") long longId, @Param("tenantId") String tenantId);
}
